<?php


namespace app\index\controller;

use think\Cache;
use think\Controller;
use think\Db;
use think\Loader;
use think\Request;

class Site extends Controller
{
    /**
     * 基础接口
     * @param Request|null $request
     */
    public function _initialize(Request $request = null) {
        // CORS 跨域 Options 检测响应 -已采用nginx代理方式解决跨域问题
//        Loader::import('ToolsService', EXTEND_PATH);
//        \ToolsService::corsOptionsHandler();
    }
    /**
     * 插入缓存
     * @param $name
     * @param $value
     * @return bool
     */
    public function set_cache($name,$value){
        $cache= new Cache();
        $cainfo= $this->get_cache($name);
        if(!$cainfo){
            $cache::set($name,[$value]);
        }else{
            //判断该值是否存在
            if(!$this->array_is_str_one($cainfo,$value)){
                $cainfo[]=$value;
                $cache::set($name,$cainfo);
            }
        }
        $cache=null;$cainfo=null;
        return true;
    }

    /**
     * 查询根据名称缓存
     * @param $name
     * @return mixed
     */
    public function get_cache($name){
        $cache= new Cache();
        return $cache::get($name);
    }

    /**
     * 一维数组判断数组中是否存在指定值，存在即返回内容，不存在则返回为false
     * @param $arr
     * @param $value
     * @return bool
     */
    public function array_is_str_one($arr,$value){
        if($arr){
            $flg=array_search($value,$arr);
            if($flg!==false){
                return $arr[$flg];
            }
        }
        return false;
    }

    /**
     * 二维数组根据传入条件查询数组并返回
     * @param $arr
     * @param $func
     * @return array
     */
    public function array_is_str_two($arr,$func){
        /*
         * //单条件查询
         * array_filter($arr,function($v){
            return ($v['PILE_STATION']=='1')?true:false;
        });
        * //多条件查询
         * array_filter($arr,function($v){return ($v['PILE_STATION']=='1' && $v['PILE_ID']=='12')?true:false;})
         * */

        return array_filter($arr,$func);
    }

    /**
     * 根据条件查询表内容
     * @param $hash
     * @return mixed
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function get_tab_info($hash){
        $data= Db::connect('sqlite_db')->query("select * from lockie_file".$hash);
        Db::clear();
        return $data;
    }

    /**
     * 添加一条内容
     * @param $tab_name
     * @param $data
     * @return int|string
     * @throws \think\Exception
     */
    public function add_tab_info($data){
        //参数：hash hash值、file_name 文件名称带后缀、file_path 文件路径、file_name_sn 文件缩略图名称带后缀、size 文件大小、type 类型格式
        $str="insert into lockie_file(uuid,hash,file_name,file_path,file_name_sn,size,type,create_date) values('".$data['uuid']."','".$data['hash']."','".$data['file_name']."','".$data['file_path']."','".$data['file_name_sn']."','".$data['size']."','".$data['type']."','".date("YmdHis")."')";
        $flg= Db::connect('sqlite_db')->execute($str);
        Db::clear();$str=null;
        return $flg;
    }

    /**
     * 生成UUID
     * @param int $type (1：MD5格式；2：带横线格式；3：带横线带大括号)
     * @return string
     */
    public function uuid($type=1) {
        $charid = md5(uniqid(mt_rand(), true));
        $hyphen = chr(45);// "-"
        switch ($type){
            case 1:
                $uuid = $charid;
                break;
            case 2:
                $uuid = substr($charid, 0, 8).$hyphen
                    .substr($charid, 8, 4).$hyphen
                    .substr($charid,12, 4).$hyphen
                    .substr($charid,16, 4).$hyphen
                    .substr($charid,20,12);

                break;
            case 3:
                $uuid = chr(123)// "{"
                    .substr($charid, 0, 8).$hyphen

                    .substr($charid, 8, 4).$hyphen

                    .substr($charid,12, 4).$hyphen

                    .substr($charid,16, 4).$hyphen

                    .substr($charid,20,12)

                    .chr(125);// "}"

                return $uuid;
                break;
            default:
                $uuid=uniqid(mt_rand(),true);
                break;
        }
        return $uuid;
    }
}